// 给定两个字符串 ransomNote 和 magazine，判断 ransomNote 能否由 magazine 中的字符组成。由小写英文字母组成

// 思路：哈希表，用26个字母长度的数组作为哈希表，统计magazine的各个字符的个数，然后遍历ransomNote更新判断
// 时间复杂度：O(n)，n是字符串的长度
// 空间复杂度：O(1)，数组的大小是固定的26

function canConstruct(ransomNote, magazine) {
    if (ransomNote.length > magazine.length) {
        return false
    }
    let arr = new Array(26).fill(0)
    let base = 'a'.charCodeAt()
    for (const char of magazine) {
        arr[char.charCodeAt() - base]++
    }
    for (const char of ransomNote) {
        if (arr[char.charCodeAt() - base] <= 0) {
            return false
        }
        arr[char.charCodeAt() - base]--
    }
    return true
}


ransomNote = "aa", magazine = "aab"
console.log(canConstruct(ransomNote, magazine))